package it.univaq.mwt.arssa.presentation.backoffice.permessi;

import it.univaq.mwt.arssa.business.ArssaBusinessFactory;
import it.univaq.mwt.arssa.business.PermessiService;
import it.univaq.mwt.arssa.business.model.TipoPermesso;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public class TipoPermessiAction extends MappingDispatchAction{
	
	public ActionForward adminvisualizzatipopermessi(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
				
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
		
		return mapping.findForward("admin.visualizza.tipopermessi");		
		
	}	
		
	public ActionForward activeadmininseriscitipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		request.setAttribute("titoloForm", "Inserisci un tipo di permesso"); // setto il titolo della form
		request.setAttribute("action", "/admin/permessi/inseriscitipopermesso"); // setto la action
		
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
	
		saveToken(request);
		
		return mapping.findForward("admin.tipopermessi.form");	
	}
	
	public ActionForward admininseriscitipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		request.setAttribute("titoloForm", "Inserisci un tipo di permesso"); // setto il titolo della form 
		request.setAttribute("action", "/admin/permessi/modificatipopermesso"); // setto la action		
						
		TipoPermessiForm tipoPermessiForm = (TipoPermessiForm) form;
		int id = tipoPermessiForm.getId();
		String nome = tipoPermessiForm.getTipo();
		int oreAnnuali = tipoPermessiForm.getOreAnnuali();
		
				
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
			return mapping.findForward("admin.tipopermessi.result");
		}
		
		TipoPermesso tipoPermesso = new TipoPermesso(id, nome, oreAnnuali);		
		permessiService.inserisciTipoPermesso(tipoPermesso);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Tipo permesso inserito con successo"); // setto il messaggio
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
				
		resetToken(request);

		
		return mapping.findForward("admin.tipopermessi.result");
		
	}
	
	public ActionForward activeadminmodificatipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
							
		int id = Integer.parseInt(request.getParameter("id"));
	
		TipoPermessiForm tipoPermessiForm = (TipoPermessiForm) form;
		BeanUtils.copyProperties(tipoPermessiForm, permessiService.cercaTipoPermesso(id)); // copio tutti i parametri nella form
		
		request.setAttribute("titoloForm", "Modifica un tipo di permesso"); // setto il titolo della form
		request.setAttribute("action", "/admin/permessi/modificatipopermesso"); // setto la action
		
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
		request.setAttribute("id", id);
		
		saveToken(request);
		
		return mapping.findForward("admin.tipopermessi.form");	
	}
	
	public ActionForward adminmodificatipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		request.setAttribute("titoloForm", "Modifica un tipo di permesso"); // setto il titolo della form 
		request.setAttribute("action", "/admin/permessi/modificatipopermesso"); // setto la action		
						
		TipoPermessiForm tipoPermessiForm = (TipoPermessiForm) form;
		int id = tipoPermessiForm.getId();
		String nome = tipoPermessiForm.getTipo();
		int oreAnnuali = tipoPermessiForm.getOreAnnuali();
		
				
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
			return mapping.findForward("admin.tipopermessi.result");
		}
		
		TipoPermesso tipoPermessoModifica = new TipoPermesso(id, nome, oreAnnuali);		
		permessiService.modificaTipoPermesso(tipoPermessoModifica);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Tipo permesso modificato con successo"); // setto il messaggio
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
				
		resetToken(request);
		
		return mapping.findForward("admin.tipopermessi.result");	
	}
	
	public ActionForward activeadmineliminatipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		int id = Integer.parseInt(request.getParameter("id"));
		
		request.setAttribute("id", id);
		request.setAttribute("tipopermesso", permessiService.cercaTipoPermesso(id));
		request.setAttribute("titoloForm", "Eliminare il seguente tipo di permesso?"); // setto il titolo della form
		request.setAttribute("action", "/admin/permessi/eliminatipopermesso"); // setto la action
		
		saveToken(request);
		
		return mapping.findForward("admin.elimina.tipopermessi.form");
		
	}
	
	public ActionForward admineliminatipopermesso(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		PermessiService permessiService = factory.getPermessiService();
		
		TipoPermessiForm tipoPermessiForm = (TipoPermessiForm) form;
		int id = tipoPermessiForm.getId();
		
		request.setAttribute("titoloForm", "Elimina il tipo permesso"); // setto il titolo della form 
			
		/* 
		 * Controllo tutti gli errori possibili dovuti all'inserimento (double submit,etc etc)
		 */
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			request.setAttribute("id", id);
			request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
			return mapping.findForward("admin.tipopermessi.result");
		}
		
		permessiService.eliminaTipoPermesso(id);
						
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Tipo di permesso eliminato correttamente"); // setto il messaggio

		request.setAttribute("id", id);
		request.setAttribute("tipopermessi", permessiService.cercaTipoPermessi());
		
		resetToken(request);
		
		return mapping.findForward("admin.tipopermessi.result");
	
	}
	
		
}
